//
//  SFTabBarController.m
//  微博
//
//  Created by 陈帅府 on 15-3-21.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#import "SFTabBarController.h"
#import "WBTabBar.h"
@interface SFTabBarController ()

@end

@implementation SFTabBarController
- (instancetype)init{
    if (self = [super init]) {
        DDLogDebug(@"%d, %s",__LINE__,__func__);
    }

    return self;
}
#pragma 判断tabbar的自控制器是在什么时候加载完成
/*
- (void)viewDidLoad{

    [super viewDidLoad];
    DDLogDebug(@"subeviews ===%@",self.tabBar.subviews);
}
*/
/*
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    DDLogDebug(@"subeviews ===%@",self.tabBar.subviews);
    //检测是否能改变自控制器的frame
    for (UIView *child in self.tabBar.subviews) {
        child.frame = CGRectMake(0, 0, 100, 100);
    }
}
*/

- (void)viewDidLoad{

    [super viewDidLoad];
    //1.自定义tabBar
    WBTabBar *tabBar = [[WBTabBar alloc]init];
    //由于self.tabBar 是只读模式所以尝试选择使用KVC赋值
   // self.tabBar = tabBar;
    //替换前的tabBar
    DDLogDebug(@"替换前  %@",self.tabBar);
    [self setValue:tabBar forKeyPath:@"tabBar"];
   //替换后的tabBar
    DDLogDebug(@" 替换后  %@",self.tabBar);
}






//当创建一个控制器的时候，会重写init 方法或是调用initWithNibName：方法，经检测在创建一个控制器的时候，这两个方法都调用了，且init方法调用的时候先调用了initNibName：这个方法所以在创建控制器的时候，只要调用了initNibName:这个方法即使需要调用init方法也一样可以
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        DDLogDebug(@"%d,%s",__LINE__,__func__);
        
        //4.设置window的子控制器
        
        UIViewController *home = [self addControllerWithClass:[UIViewController class] title:@"首页" image:@"tabbar_home" selectedImage:@"tabbar_home_selected" ];
        UIViewController *message = [self addControllerWithClass:[UIViewController class] title:@"消息" image:@"tabbar_message_center" selectedImage:@"tabbar_message_center_selected" ];
        //UIViewController *other = [self addControllerWithClass:[UIViewController class] title:@"" image:@"" selectedImage:@"" ];
        UIViewController * discover = [self addControllerWithClass:[UIViewController class] title:@"发现" image:@"tabbar_message_center" selectedImage:@"tabbar_message_center_selected" ];
        
        UIViewController *profile = [self addControllerWithClass:[UIViewController class] title:@"我" image:@"tabbar_profile" selectedImage:@"tabbar_profile_selected"];
        //5.将子控制器添加跟控制器
        self .viewControllers = @[home,message,discover,profile];
        
        //注意：默认情况下tabBar的上的图片和文字的颜色是按照tintColor来渲染的，如果不想用tintColor来渲染，可以告诉系统不用该方法来渲染图片颜色和文字颜色，如何告诉系统不用tintColor 来渲染颜色
        //1.通过纯代码来设置
        //2.通过Xcode 来设置，但只能在X6以后才能设置
        
        //tb.tabBar.tintColor = [UIColor redColor];
        
    }
    return self;
}
/**
 *  当发现有冗余的代码时，要抽取相同的代码，进而封装成一个方法
 */
/**
 *  根据一个雷来创建一个控制器
 *
 *  @param Class         控制器的类
 *  @param title         tabbar的标题
 *  @param image         默认状态下的图片
 *  @param selectedImage 选中状态下的图片
 *  @param color         控制器的北京颜色
 *
 *  @return 创建好的控制器
 */
-(UIViewController *)addControllerWithClass:(Class)class title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage
{
    UIViewController *vc = [[class alloc]init];
    return [self addControllerWithVc:vc title:title image:image selectedImage:selectedImage ];
}
/**
 *  根据一个建好的控制器来初始化孔子器
 *
 *  @param vc            已经创建的控制器
 *  @param title         标题
 *  @param image         默认状态下的图片
 *  @param selectedImage 选中状态下的图片
 *  @param color         控制器的背景颜色
 *
 *  @return 初始化后的控制器
 */
-(UIViewController *)addControllerWithVc:(UIViewController*)vc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage {
    vc.tabBarItem.title  = title;
    vc.tabBarItem.image = [UIImage imageNamed:image];
    
    //设置被选中的图片的颜色
    /**在iOS7 中不要用tabBar.tintColor 的属性来渲染图片的颜色
     */
    //1.设置图片
    UIImage * newImage = [UIImage imageNamed:selectedImage];
    //2.设置图片原样显示
    newImage = [newImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    //3.设置图片
    vc.tabBarItem.selectedImage = newImage;
    
    //设置tabBarItem 的标题为原有颜色
    [vc.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName :[UIColor orangeColor] } forState:UIControlStateSelected];

    vc.view.backgroundColor = WBNewColor;
    return vc;
}


@end
